package DataStructure.array;

/**
 * 283.移动零 https://leetcode.cn/problems/move-zeroes/
 * 题目简述：给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。原地操作
 */
public class MoveZeroes {

    /**
     * 从头至尾扫描数组，用p记录零元素个数，每扫描到一个零元素后令p增1，每扫描到一个非零元素，将其向前移动p个位置
     * 最后将数组末尾p个元素全部置零
     */
    public void moveZeroes(int[] nums) {
        int p = 0;
        for(int i=0;i < nums.length;i++) {
            if(nums[i] == 0)
                p++;
            else
                nums[i-p] = nums[i];
        }
        for(int j=0;j < p;j++) {
            nums[nums.length-1-j] = 0;
        }
    }

}
